package org.example.sword2offer.primary;

/**
 * @author: lynn
 * @Descript: 二进制中1的个数
 * Question 12
 * @date: 2021/3/8 23:38
 * @version: 1.0
 */
public class Q12_NumberOf1 {
    public static void main(String[] args) {
        System.out.println(doCountByInteger(15 ));
        System.out.println(doCountByPosition(5 ));


    }
    public static int doCountByInteger(int n){
        String str=Integer.toBinaryString(n);
        int count=0;
        for (int j = 0; j <str.length() ; j++) {
            if(str.charAt(j)=='1'){
                count++;
            }
        }
        return count;
    }

    public static int doCountByPosition(int n){
        //我们的分析就是：把一个整数减去1。再和原整数做与运算，会把该整数最右边的一个1变成0.
        //那么一个整数的二进制表示中有多少个1，就能够进行多少次运算

        //一   5:  101  4:100
        //二   101  & 100 --> 100
        //三   100  & 011 --> 000

        int count=0;
        while (n!=0){
            n=n&(n-1);
            count++;
        }
        return count;
    }


}
